---

title: SAIF.Business.Policy operations and processes

summary: Business and technical operations supported by the shared base policy library.

status: draft

owner: SAIF Claims BOF team

last_reviewed: 2026-08-25

library: SAIF.Business.Policy

reference_type: embedded

---



# SAIF.Business.Policy operations and processes



This page is the operation catalog and cross-operation hub for `SAIF.Business.Policy`. Most operations are read-only BOF retrievals or scalar lookups; the two Oracle package calls documented here also carry stored-procedure business rules [BR-POL-002](business-rules.md#br-pol-002-no-qualifying-class-minimum-falls-back-to-default-manual-class-8810) through [BR-POL-008](business-rules.md#br-pol-008-pms-status-is-limited-to-pa-pc-and-pp).



## Operation catalog



| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |

| --- | --- | --- | --- | --- | --- | --- | --- |

| [Retrieve hazard groups effective on a date](operations/retrieve-hazard-groups-effective-on-a-date.md) | Load hazard-group classification records active on a given date | Caller invokes `clsHazardGroupCollection.GetHazardGroups` | Data portal, effective date | `clsHazardGroupCollection` populated with `clsHazardGroup` items | None | [HAZARD_GROUP](database-tables.md#hazard_group) | [SQL-002](sql/SQL-002-hazard-group-retrieve.md) |

| [Determine maximum policy effective date](operations/determine-maximum-policy-effective-date.md) | Find the latest policy-period effective date for a policy | Caller reads `PolicyInformation.MaxPolicyEffectiveDate` | Data portal, policy number | Date | None | [POLICY_PERIOD](database-tables.md#policy_period) | [SQL-008](sql/SQL-008-max-policy-effective-date.md) |

| [Determine policy-period expiration date](operations/determine-policy-period-expiration-date.md) | Find the expiration date of a policy period | Caller reads `PolicyInformation.PolicyPeriodExpirationDate` | Data portal, policy number, period effective date | Date | None | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | [SQL-011](sql/SQL-011-policy-period-expiration-date.md) |

| [Determine anniversary rate date](operations/determine-anniversary-rate-date.md) | Find the anniversary rate date of a policy period | Caller reads `PolicyInformation.AnniversaryRateDate` | Data portal, policy number, period effective date | Date | None | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | [SQL-004](sql/SQL-004-policy-period-anniversary-rate-date.md) |

| [Determine market type](operations/determine-market-type.md) | Resolve the market type for a policy | Caller reads `PolicyInformation.MarketType` | Data portal, policy number | `Enums.MarketTypes` | None | [POLICY](database-tables.md#policy) | [SQL-005](sql/SQL-005-policy-market-type-lookup.md) |

| [Determine maximum premium-history set ID](operations/determine-maximum-premium-history-set-id.md) | Find the current premium-history set ID for a policy period | Caller reads `PolicyInformation.MaxPremiumHistorySetId` | Data portal, policy number, period effective date | Decimal (0 if none) | None | [PREM_HIST_SUMMARY](database-tables.md#prem_hist_summary) | [SQL-009](sql/SQL-009-max-premium-history-set-id.md) |

| [Determine policy minimum premium](operations/determine-policy-minimum-premium.md) | Retrieve the minimum premium amount for a premium-history set | Caller reads `PolicyInformation.PolicyMinimumPremium` | Data portal, premium-history set ID | Decimal (0 on failure) | [BR-POL-002](business-rules.md#br-pol-002-no-qualifying-class-minimum-falls-back-to-default-manual-class-8810), [BR-POL-003](business-rules.md#br-pol-003-voluntary-policies-before-april-1-2010-use-a-fixed-500-minimum-premium), [BR-POL-004](business-rules.md#br-pol-004-combined-voluntary-minimums-prefer-the-highest-explicit-class-minimum), [BR-POL-005](business-rules.md#br-pol-005-arp-minimums-use-arp-specific-expense-constant-logic) | N/A (stored procedure) | [SQL-010](sql/SQL-010-policy-minimum-premium-procedure.md) |

| [Determine whether the information page was printed](operations/determine-whether-the-information-page-was-printed.md) | Check whether the P401 information page endorsement was printed | Caller reads `PolicyInformation.IsInformationPagePrinted` | Data portal, policy number, period effective date | Boolean | None | [ENDORSEMENT](database-tables.md#endorsement) | [SQL-007](sql/SQL-007-information-page-printed-check.md) |

| [Determine policy ownership system](operations/determine-policy-ownership-system.md) | Determine which system owns a policy submission (WCIS vs SAIFQuote) | Caller reads `PolicyInformation.GetPolicyOwnershipSystem` | Data portal, policy number | `Enums.PolicyOwnershipSystems` | [BR-POL-006](business-rules.md#br-pol-006-submission-ownership-comes-from-the-status-code-ownership-flag), [BR-POL-007](business-rules.md#br-pol-007-missing-or-failed-ownership-lookups-default-to-wcis), [BR-POL-008](business-rules.md#br-pol-008-pms-status-is-limited-to-pa-pc-and-pp) | N/A (PL/SQL function) | [SQL-006](sql/SQL-006-policy-ownership-system-lookup.md) |

| [Resolve or cache benefit-jurisdiction code table](operations/resolve-or-cache-benefit-jurisdiction-code-table.md) | Load and cache the benefit-jurisdiction code map | Caller invokes `CodeMaps.GetBenefitJurisdictionCodeMap` | Data portal, refresh flag | Cached `clsBenefitJurisdictionCodeMap` | None | [BENEFIT_JURISDICTION_CODE](database-tables.md#benefit_jurisdiction_code) | [SQL-001](sql/SQL-001-benefit-jurisdiction-code-lookup.md) |

| [Resolve or cache manual-class-type code table](operations/resolve-or-cache-manual-class-type-code-table.md) | Load and cache the manual-class-type code map | Caller invokes `CodeMaps.GetManualClassTypeCodeMap` | Data portal, refresh flag | Cached `clsManualClassTypeCodeMap` | None | [MANUAL_CLASS_TYPE_CODE](database-tables.md#manual_class_type_code) | [SQL-003](sql/SQL-003-manual-class-type-code-lookup.md) |



## Process flow diagram



The following diagram visualizes the primary operational flow across this library's two main call patterns: standard BOF retrieve (hazard groups) and ad hoc scalar lookups (`PolicyInformation`).



```mermaid

flowchart TD

	Start([Caller request]) --> Decision{Which pattern?}

	Decision -->|BOF collection retrieve| HG[clsHazardGroupCollection.GetHazardGroups]

	HG --> BeforeRetrieve[BeforeRetrieve builds Criteria.RetrieveSQL]

	BeforeRetrieve --> Portal[Data portal executes SQL-002]

	Portal --> AfterRetrieve[AfterRetrieve constructs clsHazardGroup rows]

	AfterRetrieve --> EndHG([Return clsHazardGroupCollection])

	Decision -->|Ad hoc scalar lookup| PI[PolicyInformation.* property]

	PI --> ScalarSQL[Build scalar SQL/stored-proc request]

	ScalarSQL --> ScalarPortal[DAL.ProcessPortalRequest executes]

	ScalarPortal --> Cast[Cast/convert result]

	Cast --> EndPI([Return scalar value])

```



## Inherited operations and processes



Operations in this section originate from base classes provided by dependency framework libraries. They are inherited or delegated, not implemented in this library.



### From `clsBusinessCollection` (`SAIF.Framework.Core`)



| Operation | Intent | Provided by | Origin | Embedded in |

| --- | --- | --- | --- | --- |

| Framework lifecycle dispatch (creation, retrieval, persistence, validation, editing, data-portal dispatch) | Supports the object lifecycle that `clsHazardGroupCollection` runs through when retrieving objects† | `clsBusinessCollection` | `SAIF.Framework.Core` | [Retrieve hazard groups effective on a date](operations/retrieve-hazard-groups-effective-on-a-date.md) |



> **Origin**: These operations are defined in `SAIF.Framework.Core` / `clsBusinessCollection` and inherited or delegated by this component. Detailed retrieve/before-retrieve/after-retrieve step logic for `clsHazardGroupCollection` itself is implemented locally in this library (see the embedded operation's own steps) and is not a framework-inherited detail.



## Database interactions



The following table summarizes which operations read from the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.



| Operation | SQL | Tables | Type |

| --- | --- | --- | --- |

| [Retrieve hazard groups effective on a date](operations/retrieve-hazard-groups-effective-on-a-date.md) | [SQL-002](sql/SQL-002-hazard-group-retrieve.md) | [HAZARD_GROUP](database-tables.md#hazard_group) | Read |

| [Determine maximum policy effective date](operations/determine-maximum-policy-effective-date.md) | [SQL-008](sql/SQL-008-max-policy-effective-date.md) | [POLICY_PERIOD](database-tables.md#policy_period) | Read |

| [Determine policy-period expiration date](operations/determine-policy-period-expiration-date.md) | [SQL-011](sql/SQL-011-policy-period-expiration-date.md) | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | Read |

| [Determine anniversary rate date](operations/determine-anniversary-rate-date.md) | [SQL-004](sql/SQL-004-policy-period-anniversary-rate-date.md) | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | Read |

| [Determine market type](operations/determine-market-type.md) | [SQL-005](sql/SQL-005-policy-market-type-lookup.md) | [POLICY](database-tables.md#policy) | Read |

| [Determine maximum premium-history set ID](operations/determine-maximum-premium-history-set-id.md) | [SQL-009](sql/SQL-009-max-premium-history-set-id.md) | [PREM_HIST_SUMMARY](database-tables.md#prem_hist_summary) | Read |

| [Determine policy minimum premium](operations/determine-policy-minimum-premium.md) | [SQL-010](sql/SQL-010-policy-minimum-premium-procedure.md) | N/A (stored procedure) | Read |

| [Determine whether the information page was printed](operations/determine-whether-the-information-page-was-printed.md) | [SQL-007](sql/SQL-007-information-page-printed-check.md) | [ENDORSEMENT](database-tables.md#endorsement) | Read |

| [Determine policy ownership system](operations/determine-policy-ownership-system.md) | [SQL-006](sql/SQL-006-policy-ownership-system-lookup.md) | N/A (PL/SQL function) | Read |

| [Resolve or cache benefit-jurisdiction code table](operations/resolve-or-cache-benefit-jurisdiction-code-table.md) | [SQL-001](sql/SQL-001-benefit-jurisdiction-code-lookup.md) | [BENEFIT_JURISDICTION_CODE](database-tables.md#benefit_jurisdiction_code) | Read |

| [Resolve or cache manual-class-type code table](operations/resolve-or-cache-manual-class-type-code-table.md) | [SQL-003](sql/SQL-003-manual-class-type-code-lookup.md) | [MANUAL_CLASS_TYPE_CODE](database-tables.md#manual_class_type_code) | Read |



## Failure and edge-case behavior

- `MaxPolicyEffectiveDate` and `PolicyPeriodExpirationDate` cast the scalar result directly to `Date` without a null/`DBNull` guard; behavior when no matching row exists is unconfirmed.**

- `PolicyMinimumPremium` wraps its stored-procedure call in `Try...Catch` with an empty `Catch` block, silently swallowing any provider/database exception and returning `0`.**



## Stored procedure operations



Operations implemented in Oracle stored procedures referenced by this library.



| Operation | Description | Source | Link |

| --- | --- | --- | --- |

| Determine policy minimum premium and expense constant | Resolves policy context and returns the minimum premium result for a premium-history set, using voluntary or ARP logic as needed | `pk73069_rating_procs.get_minimum_expense_constant` | [Details](procedures/pk73069-rating-procs.md#determine-policy-minimum-premium-and-expense-constant) |

| Determine voluntary combination minimum premium | Iterates all premium-history sets in a combined voluntary policy and returns the highest applicable minimum | `pk73069_rating_procs.get_comb_vol_policy_minimum` | [Details](procedures/pk73069-rating-procs.md#determine-voluntary-combination-minimum-premium) |

| Determine ARP minimum premium and expense constant | Uses ARP-specific rate-file and expense-constant logic for non-voluntary policies | `pk73069_rating_procs.sp72759_get_arp_min_ec` | [Details](procedures/pk73069-rating-procs.md#determine-arp-minimum-premium-and-expense-constant) |

| Determine submission ownership | Returns the status-driven WCIS ownership flag and defaults to WCIS ownership on missing/error conditions | `pk73102_policy.does_wcis_own_submission` | [Details](procedures/pk73102-policy.md#determine-submission-ownership) |

| Proxy submission status transitions to POLDB | Forwards reject, unreject, pending, quoted, and app-received-date requests to the remote `@POLDB` package | `pk73102_policy.reject_submission`, `unreject_submission`, `set_submission_to_pending`, `set_submission_to_quoted`, `set_app_received_date` | [Details](procedures/pk73102-policy.md#proxy-submission-status-transitions-to-poldb) |

| Insert dividend notepad memo | Writes a `DVD` / `Dividend` memo entry through `SP72155_INSERT_MEMO_ENTRY` | `pk73102_policy.insert_dividend_notepad` | [Details](procedures/pk73102-policy.md#insert-dividend-notepad-memo) |



## Related documentation

- [Index](index.md)

- [Overview](overview.md)

- [Architecture](architecture.md)

- [Dependencies](dependencies.md)

- [Business rules](business-rules.md)

- [Database tables](database-tables.md)

- [SQL catalog](sql/index.md)

- [API reference](api/index.md)



> **Note:** Statements marked with `†` are derived from dependency library

> documentation via the Legends CLI. Statements marked with `*` were inferred

> from code structure or contextual evidence. Statements marked with `**` could

> not be confirmed; treat as unknown until verified.



## Sources

- `SAIF.Business.Policy\clsHazardGroupCollection.vb`

- `SAIF.Business.Policy\PolicyInformation.vb`

- `SAIF.Business.Policy\CodeMaps\clsBenefitJurisdictionCodeMap.vb`

- `SAIF.Business.Policy\CodeMaps\clsManualClassTypeCodeMap.vb`

- Oracle retrieval JSON: `C:\Users\chrfre\AppData\Local\Temp\oracle-sources\pk73069_rating_procs.json`

- Oracle retrieval JSON: `C:\Users\chrfre\AppData\Local\Temp\oracle-sources\pk73102_policy.json`

